package org.geeks.gsmybatis.biz.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.geeks.gsmybatis.base.mapper.BaseMapper;
import org.geeks.gsmybatis.biz.enums.Gender;
import org.geeks.gsmybatis.biz.model.User;
import org.geeks.gsmybatis.biz.sqlprovider.UserSqlProvider;
import org.geeks.gsmybatis.biz.vo.UserVo;

/**
 * 用户Mapper
 * 
 * @author geek-s
 *
 */
public interface UserMapper extends BaseMapper<User> {

	/**
	 * 根据性别查询用户
	 * 
	 * @param gender
	 *            性别
	 * @return 用户列表
	 */
	@Select("select * from user where gender = ${gender.ordinal}")
	List<User> selectByGender(@Param("gender") Gender gender);

	/**
	 * 根据条件查询
	 * 
	 * @param name
	 *            姓名
	 * @param gender
	 *            性别
	 * @param age
	 *            年龄
	 * @return 用户列表
	 */
	List<User> selectByCondition(@Param("name") String name, @Param("gender") Gender gender, @Param("age") Integer age);

	/**
	 * 根据条件查询
	 * 
	 * @param name
	 *            姓名
	 * @param gender
	 *            性别
	 * @param age
	 *            年龄
	 * @return 用户列表
	 */
	@SelectProvider(type = UserSqlProvider.class, method = "selectByConditionBySqlProvider")
	List<UserVo> selectByConditionBySqlProvider(@Param("name") String name, @Param("gender") Gender gender,
			@Param("age") Integer age);

}
